home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 684 / 684.xpi / chrome / fireftp.jar / content / js / dialogs / programs.js < prev    next >
Text File  |  2008-01-04  |  8KB  |  280 lines

  1. var gStrbundle;
  2. var gPrograms;
  3. var gArgs;
  4.  
  5. function init() {
  6.   setTimeout(window.sizeToContent, 0);
  7.  
  8.   gStrbundle = $("strings");
  9.   gArgs      = window.arguments;
  10.   gPrograms  = gArgs[0].value;
  11.   var index  = -1;
  12.  
  13.   for (var x = 0; x < gPrograms.length; ++x) {
  14.     if (gPrograms[x].extension == gArgs[0].extension.toLowerCase()) {
  15.       index = x;
  16.     }
  17.  
  18.     $('extensions').appendItem(gPrograms[x].extension, gPrograms[x].extension);
  19.   }
  20.  
  21.   disableAll();
  22.  
  23.   if (index == -1 && gArgs[0].extension != "") {
  24.     setTimeout("initHelper()", 0);
  25.   } else if (gArgs[0].extension != "") {
  26.     setTimeout("initHelper2(" + index + ")", 0);
  27.   }
  28. }
  29.  
  30. function initHelper() {                             // XXX: we get warnings otherwise if we don't do the setTimeout.  stupid listbox.
  31.   addExtension(gArgs[0].extension.toLowerCase());
  32.   addProgram();
  33. }
  34.  
  35. function initHelper2(index) {                       // XXX: ditto
  36.   $('extensions').ensureIndexIsVisible(index);
  37.   $('extensions').selectedIndex = index;
  38.   loadPrograms();
  39.   addProgram();
  40. }
  41.  
  42. function disableAll() {
  43.   $('program').disabled = true;
  44.   $('addp').disabled    = true;
  45.   $('removep').disabled = true;
  46.   detailsDisabler(true);
  47.  
  48.   for (var x = $('program').getRowCount() - 1; x >= 0; --x) {
  49.     $('program').removeItemAt(x);
  50.   }
  51. }
  52.  
  53. function detailsDisabler(disable) {
  54.   $('namelabel').disabled       = disable;
  55.   $('name').disabled            = disable;
  56.   $('executablelabel').disabled = disable;
  57.   $('executable').disabled      = disable;
  58.   $('browse').disabled          = disable;
  59.   $('argumentslabel').disabled  = disable;
  60.   $('arguments').disabled       = disable;
  61.   $('argshelp1').disabled       = disable;
  62.   $('argshelp2').disabled       = disable;
  63.   $('apply').disabled           = disable;
  64.   $('name').value               = "";
  65.   $('executable').value         = "";
  66.   $('arguments').value          = "";
  67.   $('name').removeAttribute('missing');
  68.   $('executable').removeAttribute('missing');
  69. }
  70.  
  71. function addExtension(ext) {
  72.   var newExtension = ext ? ext : window.prompt(gStrbundle.getString("extension"), "", gStrbundle.getString("addExtension"));
  73.  
  74.   if (!newExtension || newExtension == ".") {
  75.     return;
  76.   }
  77.  
  78.   if (newExtension.indexOf('.') != -1) {
  79.     newExtension = newExtension.substring(newExtension.lastIndexOf('.') + 1, newExtension.length);
  80.   }
  81.  
  82.   newExtension = { extension: newExtension.toLowerCase(), programs: new Array() };
  83.  
  84.   for (var x = 0; x < $('extensions').getRowCount(); ++x) {
  85.     if ($('extensions').getItemAtIndex(x).value == newExtension.extension) {
  86.       return;
  87.     }
  88.   }
  89.  
  90.   for (var x = 0; x < $('extensions').getRowCount(); ++x) {
  91.     if ($('extensions').getItemAtIndex(x).value > newExtension.extension) {
  92.       $('extensions').insertItemAt(x, newExtension.extension, newExtension.extension);
  93.       gPrograms.splice(x, 0, newExtension);
  94.       $('extensions').ensureIndexIsVisible(x);
  95.       $('extensions').selectedIndex = x;
  96.       loadPrograms();
  97.       return;
  98.     }
  99.   }
  100.  
  101.   $('extensions').appendItem(newExtension.extension, newExtension.extension);
  102.   gPrograms.push(newExtension);
  103.  
  104.   disableAll();
  105.  
  106.   $('extensions').ensureIndexIsVisible($('extensions').getRowCount() - 1);
  107.   $('extensions').selectedIndex = $('extensions').getRowCount() - 1;
  108.   loadPrograms();
  109.   $('addp').focus();
  110. }
  111.  
  112. function removeExtension() {
  113.   if (!$('extensions').selectedItem) {
  114.     return;
  115.   }
  116.  
  117.   var value = $('extensions').selectedItem.value;
  118.  
  119.   if (value == "*.*") {
  120.     return;
  121.   }
  122.  
  123.   $('extensions').removeItemAt($('extensions').getIndexOfItem($('extensions').selectedItem));
  124.  
  125.   for (var x = 0; x < gPrograms.length; ++x) {
  126.     if (gPrograms[x].extension == value) {
  127.       gPrograms.splice(x, 1);
  128.       break;
  129.     }
  130.   }
  131.  
  132.   disableAll();
  133. }
  134.  
  135. function loadPrograms() {
  136.   if (!$('extensions').selectedItem) {
  137.     return;
  138.   }
  139.  
  140.   $('removeext').disabled = $('extensions').selectedItem.value == "*.*";
  141.   $('program').disabled   = false;
  142.   $('addp').disabled      = false;
  143.   $('removep').disabled   = false;
  144.   detailsDisabler(true);
  145.  
  146.   for (var x = $('program').getRowCount() - 1; x >= 0; --x) {
  147.     $('program').removeItemAt(x);
  148.   }
  149.  
  150.   for (var x = 0; x < gPrograms.length; ++x) {
  151.     if ($('extensions').selectedItem.value == gPrograms[x].extension) {
  152.       for (var y = 0; y < gPrograms[x].programs.length; ++y) {
  153.         $('program').appendItem(gPrograms[x].programs[y].name, gPrograms[x].programs[y].name);
  154.       }
  155.       break;
  156.     }
  157.   }
  158. }
  159.  
  160. function loadProgramDetails() {
  161.   if (!$('program').selectedItem) {
  162.     return;
  163.   }
  164.  
  165.   for (var x = 0; x < gPrograms.length; ++x) {
  166.     if ($('extensions').selectedItem.value == gPrograms[x].extension) {
  167.       for (var y = 0; y < gPrograms[x].programs.length; ++y) {
  168.         if ($('program').selectedItem.value == gPrograms[x].programs[y].name) {
  169.           detailsDisabler(false);
  170.           $('name').value       = gPrograms[x].programs[y].name;
  171.           $('executable').value = gPrograms[x].programs[y].executable;
  172.           $('arguments').value  = gPrograms[x].programs[y].arguments;
  173.           break;
  174.         }
  175.       }
  176.       break;
  177.     }
  178.   }
  179. }
  180.  
  181. function addProgram() {
  182.   if (!$('extensions').selectedItem) {
  183.     return;
  184.   }
  185.  
  186.   detailsDisabler(false);
  187.   $('name').focus();
  188. }
  189.  
  190. function removeProgram() {
  191.   if (!$('program').selectedItem) {
  192.     return;
  193.   }
  194.  
  195.   for (var x = 0; x < gPrograms.length; ++x) {
  196.     if ($('extensions').selectedItem.value == gPrograms[x].extension) {
  197.       for (var y = 0; y < gPrograms[x].programs.length; ++y) {
  198.         if ($('program').selectedItem.value == gPrograms[x].programs[y].name) {
  199.           gPrograms[x].programs.splice(y, 1);
  200.           break;
  201.         }
  202.       }
  203.       break;
  204.     }
  205.   }
  206.  
  207.   var value = $('program').selectedItem.value;
  208.   $('program').removeItemAt($('program').getIndexOfItem($('program').selectedItem));
  209.  
  210.   loadPrograms();
  211. }
  212.  
  213. function apply() {
  214.   if ($('name').value == "" || $('executable').value == "") {
  215.     if ($('executable').value == "") {
  216.       $('executable').setAttribute('missing', true);
  217.       $('executable').focus();
  218.     }
  219.  
  220.     if ($('name').value == "") {
  221.       $('name').setAttribute('missing', true);
  222.       $('name').focus();
  223.     }
  224.  
  225.     return;
  226.   }
  227.  
  228.   var extIndex       = 0;
  229.   var inserted       = false;
  230.   var programDetails = { name       : $('name').value,
  231.                          executable : $('executable').value,
  232.                          arguments  : $('arguments').value };
  233.  
  234.   for (var x = 0; x < gPrograms.length; ++x) {
  235.     if ($('extensions').selectedItem.value == gPrograms[x].extension) {
  236.       extIndex = x;
  237.       for (var y = 0; y < gPrograms[x].programs.length; ++y) {
  238.         if (gPrograms[x].programs[y].name == $('name').value) {
  239.           gPrograms[x].programs[y] = programDetails;
  240.           inserted = true;
  241.           break;
  242.         }
  243.         if (gPrograms[x].programs[y].name > $('name').value) {
  244.           gPrograms[x].programs.splice(y, 0, programDetails);
  245.           inserted = true;
  246.           break;
  247.         }
  248.       }
  249.       break;
  250.     }
  251.   }
  252.  
  253.   if (!inserted) {
  254.     gPrograms[extIndex].programs.push(programDetails);
  255.   }
  256.  
  257.   loadPrograms();
  258. }
  259.  
  260. function browseLocal() {
  261.   var nsIFilePicker = Components.interfaces.nsIFilePicker;
  262.   var fp            = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  263.   fp.init(window, gStrbundle.getString("selectFolder"), nsIFilePicker.modeOpen);
  264.   fp.appendFilters(nsIFilePicker.filterApps | nsIFilePicker.filterAll);
  265.   var res = fp.show();
  266.  
  267.   if (res == nsIFilePicker.returnOK) {
  268.     $('executable').value = fp.file.path;
  269.   }
  270. }
  271.  
  272. function savePrograms() {
  273.   if (!$('apply').disabled) {
  274.     apply();
  275.   }
  276.  
  277.   gArgs[1].value = true;
  278.   return true;
  279. }
  280.